<?php
/**
 * Descripción de "foros.php":
 * Objeto que carga los foros de la base de datos.
 *
 * @author peregrina
 */

class usuarios extends comun{
    
    function __construct($from, $tipo, $id) {
        parent::__construct($from, $tipo, $id);
    }
    
    function cargar($id){
        
        //?uid=registrar: carga forma para registrar.
        if($id=="registrar" || $this->id=="aregistrar"){
            $this->crear();
        }
        
        //?uid=sesion: carga forma para inciar sesión si no hay cookie, cierra sesion si ha cookie
        elseif($id=="sesion"){
            $this->sesion();
        }
        
        //?uid=#: Carga información básica del usuario.
        elseif(is_numeric($id)){
            $this->id_definido();
        }
        
        //La pagina principal
        elseif(empty($this->id)){
            $this->id_no_definido();
            
        }
    }
    
    function crear(){
        //Si no se habia entrado al formulario
        $this->HTML["titulo"] = "Registrar usuario";
        
        $a = "";
        if(empty($_POST["registrando"])){
            if($this->id=="aregistrar"){
                $this->HTML["titulo"] = "Registra al primer administrador";
                $a .= '<input type="hidden" name="a">';
            }
            $this->HTML["cuerpo"] .= <<<FIN
            <h1>{$this->HTML["titulo"]}</h1>
                <form method="POST" action="?uid=registrar" class="sesion">
                Nombre completo: <input type="text" name="nombre_completo" class="aladerecha" onblur="verificar_longitud(this,1,50);"><br /><br />
                Nombre de usuario: <input type="text" name="nombre" class="aladerecha" onblur="verificar_longitud(this,1,20);"><br /><br />
                Contraseña: <input type="password" name="contrasena" class="aladerecha" onblur="verificar_longitud(this,5,64);"><br /><br />
                $a
                <input type="submit" name="registrando" value="Registrar">
                </form>
FIN;
        }
        
        //Si ya se ingresó toda la información
        else{
            $nombre = $this->bdd->mysqli->real_escape_string($_POST["nombre"]);
            $nombre_completo = $this->bdd->mysqli->real_escape_string($_POST["nombre_completo"]);
            $contrasena = $this->contrasena($nombre, $_POST["contrasena"]);
            $admin = (isset($_POST["a"]))?"true":"false";
			
			//TODO: Verificar que no exista otro usuario.

            $pre = $this->bdd->query("select Buscar_UID('$nombre') as UID;");

            if($pre['UID']!="-1"){
                $this->HTML["titulo"] = "El usuario ya existe"; 
                $this->HTML["cuerpo"] = "<h1>{$this->HTML["titulo"]}</h1>Porfavor elige otro nombre de usuario.";
            }
            else{
                //Ingresar al usuario
                $this->bdd->insert("insert into Usuarios values (NULL, '$nombre', '$contrasena', '$nombre_completo', $admin );");

                //Insertar cookie
                setcookie("Autor", $nombre);  

                //Redireccionamos a la página principal
                $this->redirect("");
            }
            
        }
    }
    
    function sesion(){
        //Si no estaba autentificado
        if(empty($_COOKIE["Autor"])){
            //Si no se había entrado al formulario
            if(empty($_POST["iniciando"])){
                $this->iniciando();
        }
            
        //Si ya se ingresó toda la información
        else{
            $this->guardar();
            }
        }
            
        //Si ya estaba autentificado
        else{
            //Si apenas se dio clic en sesión
            if(empty($_POST["cerrando"]) ){
                $this->configuraciones();
            }
            //Si ya se había dado clic en cerrar sesión
            else{
                $this->cerrar_sesion();
                //Redireccionamos a la página principal
                $this->redirect("");
                }
            }
        }
    
    function editar(){
        $this->bdd->insert("update Usuarios set Administrador={$_POST["a"]} where UID='{$this->id}';");
    }
    
    function id_definido(){
        //Agregar o quitar
        if(!empty($_POST["a"])){
            $this->editar();
        }
            
        //Hacemos el query
        $res = $this->bdd->query("select * from Usuarios where UID='$this->id';");

        if(empty($res)){
            //ID no encontrado
            $GLOBALS["HTTP_Status"] = "404";
            $this->HTML["titulo"] = "Usuario no encontrado";
            $this->HTML["cuerpo"] .= "<h1>". $this->HTML["titulo"] ."</h1>\n<p>El usuario no existe.</p>";
        }
        
        else{
            //ID encontrado
            $adm = ($res["Administrador"]==true)?"Es administrador.":"";
            $hacer_adm = "";
            if($GLOBALS["aut"]>2){
                if($res["Administrador"]==true){
                    //Quitar de administrador
                    $hacer_adm .= "<input type=\"button\" value=\"Hacer autor\" onclick=\"post('?uid={$res["UID"]}',{a:'false'})\">";
                }
                else{
                    $hacer_adm .= "<input type=\"button\" value=\"Hacer administrador\" onclick=\"post('?uid={$res["UID"]}',{a:'true'})\">";
                }
            }
            
            
            //Desplegar
            $this->HTML["titulo"] = "Usuarios: ".$res["Nombre"];
            $this->HTML["cuerpo"] .= <<<FIN
            <h1><a href="?uid">Usuarios:</a> {$res["Nombre"]}</h1>
                <p>Nombre de usuario: {$res["Nombre"]}.<br />
                Nombre completo: {$res["Nombre_completo"]}.<br />
                $adm<br />
                $hacer_adm</p>
FIN;
        }
    }
    
    function id_no_definido(){
        //Crear lista
        $i = (!empty($_GET["i"]))?$_GET["i"]:1;
        $res = $this->bdd->multiquery("select UID, Nombre from Usuarios where UID>='$i' order by UID limit {$GLOBALS["iph"]};");
        $usuarios="";
        foreach($res as $us){
            $usuarios .= "<li><a href='?uid={$us["UID"]}'>{$us["Nombre"]}</a></li>";
            $uid_u = $us["UID"];
        }
        
        $siga = $this->sig_ant(true, "u", $this->from, $uid_u);
        $anta = $this->sig_ant(false, "u", $this->from, $i);
        
        $this->HTML["titulo"] = "Usuarios";
        $this->HTML["cuerpo"] = <<<FIN
        <h1>{$this->HTML["titulo"]}</h1>
        <p><ul>
        $usuarios
        </ul></p>
        $anta $siga <br /><br />
FIN;
    }
    
    function iniciando(){
        $this->HTML["titulo"] = "Iniciar sesión";
        $this->HTML["cuerpo"] .= <<<FIN
        <h1>{$this->HTML["titulo"]}</h1>
            <form method="POST" action="?uid=sesion" class="sesion">
            Nombre de usuario: <input type="text" name="nombre" class="aladerecha"><br /><br />
            Contraseña: <input type="password" name="contrasena" class="aladerecha"><br /><br />
            <div class="aladerecha">
            <input type="submit" name="iniciando" value="Iniciar sesión">
            <input type="button" onclick="location='?uid=registrar'" value="Registrar">
            </div><br />
            </form>
FIN;
    }
    
    function guardar(){
        $nombre = $this->bdd->mysqli->real_escape_string($_POST["nombre"]);
        $contrasena = $_POST["contrasena"];
        
        //Query
        $res = $this->bdd->query("select Nombre, Contrasena from Usuarios where Nombre='$nombre';");
        $c_nue = $this->contrasena($nombre, $contrasena);
        if(strcmp($res["Contrasena"], $c_nue)==0){
            //Insertar cookie
            setcookie("Autor", $_POST["nombre"]);
            
            //Redireccionamos a la página principal
            $this->redirect("");
        }
        else{
            $this->HTML["titulo"] = "No Autentificado";
            $this->HTML["cuerpo"] .= <<<FIN
            <h1>{$this->HTML["titulo"]}</h1>
            <p>El usuario no existe o la contraseña está incorrecta, intenta de nuevo.</p>
FIN;
        }
                
    }
    
    function configuraciones(){
        $this->HTML["titulo"] = $_COOKIE["Autor"];
        $this->HTML["cuerpo"] .= <<<FIN
        <h1>{$this->HTML["titulo"]}</h1>
            <h2>Cerrar sesión</h2>
            <form method="post" action="?uid=sesion">
            Si quieres cerrar tu sesión {$_COOKIE["Autor"]}, da clic en el botón:
            <input type="submit" name="cerrando" value="Cerrar sesión">
            </form>
            <h2>Borrar cuenta</h2>
            <form method="post" action="?uid=sesion">
            Si quieres borrar tu cuenta, da clic en el botón:
            <input type="submit" name="cerrando" value="Borrar cuenta">
            </form>
FIN;
            if($GLOBALS["aut"]>2){
                $this->HTML["cuerpo"] .= <<<FIN
            <h2>Configuración del sitio</h2>
            <form method="get" action="?">
            Para configurar el sitio, da clic en el botón:
            <input type="submit" name="config" value="Configurar sitio">
            </form>        
FIN;
            }
    }
    
    function cerrar_sesion(){
        //Borrar cookie
        setcookie ("Autor", "", time() - 3600);
        
        //Se pide borrar al usuario
        if($_POST["cerrando"]=="Borrar cuenta"){
            $this->bdd->insert("call Borrar_usuario(Buscar_UID('".mysqli_real_escape_string($_COOKIE["Autor"])."'));");
        }
    }
    
    //Regresa el hash con sal para validar las contraseñas
    function contrasena($usuario,$contrasena){
        $sal = hash("sha256","Derechos de Autor: Luis Antonio Peregrina Andrade".$usuario);
        $hash = hash("sha256",$sal.$contrasena.$sal);
        return $hash;
    }
    
}

?>
